add stubhub agent specs

Ryan Loomba 10 年之前
父节点
当前提交
52757973f7
共有 2 个文件被更改,包括 85 次插入0 次删除
  1. 17 0
      spec/data_fixtures/stubhub_data.json
  2. 68 0
      spec/models/agents/stubhub_agent_spec.rb

+ 17 - 0
spec/data_fixtures/stubhub_data.json

@@ -0,0 +1,17 @@
1
+{
2
+  "response":{
3
+    "docs":[
4
+      {
5
+      "url": "http://www.stubhub.com/event/name-1-1-2014-12345",
6
+      "seo_description_en_US": "name",
7
+      "event_date_local": "2014-01-01",
8
+      "maxPrice": "100",
9
+      "minPrice": "50",
10
+      "totalPostings": "100",
11
+      "totalTickets": "200",
12
+      "venue_name": "Venue Name"
13
+    }
14
+    ]
15
+  }
16
+}
17
+

+ 68 - 0
spec/models/agents/stubhub_agent_spec.rb

@@ -0,0 +1,68 @@
1
+require 'spec_helper'
2
+
3
+describe Agents::StubhubAgent do
4
+
5
+  let(:name) { 'Agent Name' }
6
+  let(:url) { 'http://www.stubhub.com/event/name-1-1-2014-12345' }
7
+  let(:parsed_body) { JSON.parse(body)['response']['docs'][0] }
8
+  let(:valid_params) { { 'url' => parsed_body['url'] } }
9
+  let(:body) { File.read(Rails.root.join('spec/data_fixtures/stubhub_data.json')) }
10
+  let(:stubhub_event_id) { 12345 }
11
+  let(:response_payload) { {
12
+                            'url' => url,
13
+                            'name' => parsed_body['seo_description_en_US'],
14
+                            'date' => parsed_body['event_date_local'],
15
+                            'max_price' => parsed_body['maxPrice'],
16
+                            'min_price' => parsed_body['minPrice'],
17
+                            'total_postings' => parsed_body['totalPostings'],
18
+                            'total_tickets' => parsed_body['totalTickets'],
19
+                            'venue_name' => parsed_body['venue_name']
20
+                            } }
21
+
22
+  before do
23
+      stub_request(:get, "http://www.stubhub.com/listingCatalog/select/?q=%2B%20stubhubDocumentType:event%0D%0A%2B%20event_id:#{stubhub_event_id}%0D%0A&rows=10&start=0&wt=json").
24
+         with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Host'=>'www.stubhub.com', 'User-Agent'=>'Ruby'}).
25
+         to_return(:status => 200, :body => body, :headers => {})
26
+
27
+    @stubhub_agent = described_class.new(name: name, options: valid_params)
28
+    @stubhub_agent.user = users(:jane)
29
+    @stubhub_agent.save!
30
+  end
31
+
32
+
33
+  describe "#check" do
34
+
35
+    it 'should create an event' do
36
+      expect { @stubhub_agent.check }.to change { Event.count }.by(1)
37
+    end
38
+
39
+    it 'should properly parse the response' do
40
+      event = @stubhub_agent.check
41
+      event.payload.should == response_payload
42
+    end
43
+  end
44
+
45
+  describe "validations" do
46
+    before do
47
+      @stubhub_agent.should be_valid
48
+    end
49
+
50
+    it "should require a url" do
51
+      @stubhub_agent.options['url'] = nil
52
+      @stubhub_agent.should_not be_valid
53
+    end
54
+
55
+  end
56
+
57
+  describe "#working?" do
58
+    it "checks if events have been received within the expected receive period" do
59
+      @stubhub_agent.should_not be_working
60
+
61
+      Agents::StubhubAgent.async_check @stubhub_agent.id
62
+      @stubhub_agent.reload.should be_working
63
+      two_days_from_now = 2.days.from_now
64
+      stub(Time).now { two_days_from_now }
65
+      @stubhub_agent.reload.should_not be_working
66
+    end
67
+  end
68
+end